||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||PUT IT IN POWERSHELL||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

$APPID      = 730
$APPNAME    = "cs2"
$INSTALLDIR = "Counter-Strike Global Offensive"
$MOD        = "csgo"
$GAMEBIN    = "bin\win64"
$USER_VCFG  = "${APPNAME}_user_convars_0_slot0.vcfg"
$KEYS_VCFG  = "${APPNAME}_user_keys_0_slot0.vcfg"
$MACH_VCFG  = "${APPNAME}_machine_convars.vcfg"
$VIDEO_TXT  = "${APPNAME}_video.txt"

#:: detect STEAM and specific APP
$STEAM = resolve-path (gpv "HKCU:\SOFTWARE\Valve\Steam" SteamPath)
gc "$STEAM\steamapps\libraryfolders.vdf" |foreach  {$_ -split '"',5} |where {$_ -like '*:\\*'} |foreach {
  $l = resolve-path $_; $i = "$l\steamapps\common\$INSTALLDIR"; if (test-path "$i\game\$MOD\steam.inf") {
  $STEAMAPPS = "$l\steamapps"; $GAMEROOT = "$i\game"; $GAME = "$i\game\$MOD"
}}

#:: detect per-user data path
pushd "$STEAM\userdata"
$USRCLOUD = split-path (dir "localconfig.vdf" -File -Recurse | sort LastWriteTime -Descending | Select -First 1).DirectoryName
$USRLOCAL = "$USRCLOUD\$APPID\local"
popd

# detect roaming profile path
if ($env:USRLOCALCSGO -and (test-path "$env:USRLOCALCSGO\cfg\$MACH_VCFG")) { $USRLOCAL = "$env:USRLOCALCSGO" }

#:: use freshest config across supported locations
mkdir "$env:temp\cs2" -force -ea 0 >''
robocopy "$GAMEDIR\cfg/" "$env:temp\cs2/" $USER_VCFG $KEYS_VCFG $MACH_VCFG $VIDEO_TXT /XO >''
robocopy "$USRLOCAL\cfg/" "$env:temp\cs2/" $USER_VCFG $KEYS_VCFG $MACH_VCFG $VIDEO_TXT /XO >''

#:: export steam userdata configs to autoexec.cfg
$autoexec = "$([Environment]::GetFolderPath('Desktop'))\autoexec.cfg"
set-content "$autoexec" "// AveYo: $APPNAME settings from $VIDEO_TXT - must recreate manually" -force -ea 0
$video_txt = "$env:temp\cs2\$VIDEO_TXT"; $cfg = new-object System.Text.StringBuilder(10000)
$filter = 'default|screen|border|sync|quality|msaa|cmaa|videocfg|r_low'
if (test-path $video_txt) {
  gc $video_txt |foreach { $l = $_ -split '"'; if ($l.count -eq 5 -and $_ -match $filter) {
    [void]$cfg.AppendLine('// ' + ($l[1]-replace'setting.'-replace'videocfg_').ToUpper() + ' ' + $l[3]) } }
  if ($cfg.length -gt 0) { ac -Literal "$autoexec" -Value $cfg.ToString() }
}
ac "$autoexec" "// AveYo: $APPNAME settings from $KEYS_VCFG" -force -ea 0
$keys_vcfg = "$env:temp\cs2\$KEYS_VCFG"; $cfg = new-object System.Text.StringBuilder(10000)
if (test-path $keys_vcfg) {
  gc $keys_vcfg |foreach { $l = $_ -split '"'; if ($l.count -eq 5) {
    [void]$cfg.AppendLine('bind "' + $l[1] + '" "' + $l[3] + '";') } }
  if ($cfg.length -gt 0) { ac -Literal "$autoexec" -Value $cfg.ToString() }
}
ac "$autoexec" "// AveYo: $APPNAME settings from $USER_VCFG" -force -ea 0
$user_vcfg = "$env:temp\cs2\$USER_VCFG"; $cfg = new-object System.Text.StringBuilder(10000)
if (test-path $user_vcfg) {
  gc $user_vcfg |foreach { $l = $_ -split '"'; if ($l.count -eq 5) {
    [void]$cfg.AppendLine('"' + $l[1] + '" "' + $l[3] + '";') } }
  if ($cfg.length -gt 0) { ac -Literal "$autoexec" -Value $cfg.ToString() }
}
ac "$autoexec" "// $APPNAME settings from $MACH_VCFG" -force -ea 0
$machine_vcfg = "$env:temp\cs2\$MACH_VCFG"; $cfg = new-object System.Text.StringBuilder(10000)
if (test-path $machine_vcfg) {
  gc $machine_vcfg |foreach { $l = $_ -split '"'; if ($l.count -eq 5) {
    [void]$cfg.AppendLine('"' + $l[1].Split('$')[0] + '" "' + $l[3] + '";') } }
  if ($cfg.length -gt 0) { ac -Literal "$autoexec" -Value $cfg.ToString() }
}

write-host " ROAMING DATA = $USRLOCAL `n STEAM DATA   = $USRCLOUD `n GAME DATA    = $GAME\cfg " -fore cyan
write-host " CS2 autoexec.cfg generated on Desktop " -fore green
$_PRESS_ENTER